package app.fichajes.main;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import app.fichajes.asyncTask.PreparaDatos;
import app.fichajes.asyncTask.PreparaNoticias;
import app.fichajes.constants.Constants;
import app.fichajes.data.parser.FacadeNoticiasRSSLaSexta;
import app.fichajes.utils.ChangeViews;
import app.fichajes.utils.CuentaAtras;

import com.gi.libraryutility.main.ActivityUtility;


public class Main<E> extends ActivityUtility {
	
	private static Context context;
	private LinearLayout inicio;
	private View grid_equipos;
	private View altas_bajas;
	private View noticias;
	public CuentaAtras cuentaAtras;
	public static Map<String, List<Object>> mapButtonState;
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        context = this;
        
        inicio = (LinearLayout)this.findViewById(R.id.linearLayoutInicio);
        grid_equipos = (View)this.findViewById(R.id.includeGridEquipos);
        altas_bajas = (View)this.findViewById(R.id.includeAltasYbajas);
        noticias = (View)this.findViewById(R.id.includeNoticias);
 
        
        Constants.mapVistas = new HashMap<String, View>();
        Constants.mapVistas.put(Constants.VIEW_PORTADA, inicio);
        Constants.mapVistas.put(Constants.VIEW_GRID_EQUIPOS, grid_equipos);
        Constants.mapVistas.put(Constants.VIEW_ALTAS_BAJAS, altas_bajas);
        Constants.mapVistas.put(Constants.VIEW_NOTICIAS, noticias);
        
        Constants.pilaNavegacion = new Stack<String>();
        Constants.pilaNavegacion.push(Constants.PILA_ESTADO_INICIAL);
        
        
        menuGeneral();
        init();
        initCuentaAtras();
       
    }
    
    
    @Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		
	}


	private void initCuentaAtras() {
    	
    	 Thread thread = new Thread() {
 			@Override
 			public void run() {
 								
 				postRunnable(new Runnable() {
 					@Override
 					public void run() {
 						TextView tiempoRestante = (TextView) findViewById(R.id.textViewTiempoRestante);
 						cuentaAtras = CuentaAtras.getInstance(tiempoRestante);
 					}
 				});
 			 				
 			}
 		};
 		thread.start();
	}

	private void init(){
    	new PreparaDatos().execute();
    }
    
    public static Context getContext(){
    	return context;
    }
    
    private void menuGeneral(){
    	
    	
    	
    	LinearLayout portada = (LinearLayout)this.findViewById(R.id.LinearLayoutPortada);
    	LinearLayout noticias = (LinearLayout)this.findViewById(R.id.LinearLayoutNoticias);
    	LinearLayout gridEquipos = (LinearLayout)this.findViewById(R.id.linearLayoutEquipos);
    	
    	initMapButtonState(portada,noticias,gridEquipos);
    	
    	
    	portada.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//vaciamos la pila
				while(!Constants.pilaNavegacion.peek().equals(Constants.PILA_ESTADO_INICIAL))
					Constants.pilaNavegacion.pop();
				
				ChangeViews.cambiaInclude(Constants.VIEW_PORTADA);
			}
		});
    	
    	noticias.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(FacadeNoticiasRSSLaSexta.numeroNoticiaActual != FacadeNoticiasRSSLaSexta.MAX_NOTICIAS)
					new PreparaNoticias().execute();
				else
					ChangeViews.cambiaInclude(Constants.VIEW_NOTICIAS);
			}
		});
    	
    	gridEquipos.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				ChangeViews.cambiaInclude(Constants.VIEW_GRID_EQUIPOS);
			}
		});
    	
    }

    /**Este metodo inicializa un mapa con el layot y los recursos necesarios para su manipulacion
     * 
     * @param portada
     * @param noticias
     * @param gridEquipos
     */
    private void initMapButtonState(LinearLayout portada,LinearLayout noticias, LinearLayout gridEquipos) {
    	
    	List<Object> list1 = new ArrayList<Object>();
    	List<Object> list2 = new ArrayList<Object>();
    	List<Object> list3 = new ArrayList<Object>();
    	List<Object> list4 = new ArrayList<Object>();
    	mapButtonState =  new HashMap<String, List<Object>>();
    	
    	list1.add(portada);list1.add(R.drawable.inicio_on);list1.add(R.drawable.inicio_off);
    	mapButtonState.put(Constants.VIEW_PORTADA, list1);
    	list2.add(noticias);list2.add(R.drawable.noticias_on);list2.add(R.drawable.noticias_off);
    	mapButtonState.put(Constants.VIEW_NOTICIAS, list2);
    	list3.add(gridEquipos);list3.add(R.drawable.equipos_on);list3.add(R.drawable.equipos_off);
    	list4.add(gridEquipos);list4.add(R.drawable.equipos_on);list4.add(R.drawable.equipos_off);
    	//comparten boton por eso comparten recurso
    	mapButtonState.put(Constants.VIEW_GRID_EQUIPOS, list3);
    	mapButtonState.put(Constants.VIEW_ALTAS_BAJAS, list4);

		
	}
    
    

	//TODO: controlar el botón de "patrás"
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			
			if(Constants.pilaNavegacion.peek().equals(Constants.PILA_ESTADO_INICIAL)){
				Main.getActivityActual().finish();
				System.exit(1);
			}
			else{
				Constants.pilaNavegacion.pop();
				ChangeViews.cambiaInclude(Constants.pilaNavegacion.peek());
			}
			
			return true;
		}
		else
			return super.onKeyDown(keyCode, event);
	}
    
    
}